ChatGPT 微服务应用体系构建
- **课程首页:**https://t.zsxq.com/0d3o5FKvc
- 本章重点:开篇介绍课程信息以及如何进入学习。后续也会把一些共性的学习问题在这里说明
- 本章源码:https://gitcode.net/KnowledgePlanet/chatgpt - 以围绕 ChatGPT 所需的场景进行设计和实现,UI/Client、API 等。并涵盖以提供支撑业务开发的组件 SDK 提供服务,用于基础建设设施层的物料,此服务与 ChatGPT 业务开发解耦
- 课程视频:https://t.zsxq.com/0dYzxHlZv
项目概述
核心是关于 微服务应用体系的构建,通过讲解配置 Docker、Nginx、SSL 等环境以及开发出鉴权、认证、微信公众号、企业微信、支付宝交易等模块的方式,完善体系的物料服务。而 ChatGPT 只是其中的一种产品形态而已,这种产品形态通过 API 的方式与具体的物料服务模块解耦。这样做的方式是因为基础的物料【物料指 SDK 和服务】并不会频繁变化,而离业务最近的 API 会随业务变动发生较多的改动。所以这样的应用架构方式,在互联网大厂中也是非常常见和常用的。
这些东西的价值在于架构思维,而不是永远的在 CV+CRUD。可以把项目中所涉及的组件开发,都能进行任意物料模块与需要对接的服务进行关联打通使用。方便写到简历、用到项目、实战锻炼、积累经验
拓扑结构
以工程拓扑的视角看下这套需要开发的系统
如拓扑结构,系统从上到下以不同的产品形态,统一调用封装的服务API进行功能的流转。API系统中所处理的核心动作,会以各个物料模块进行实现。所以这里会拆分出标准的 ChatGPT-API 业务系统,之后再由各个模块系统支撑。到具体的模块中再进行详细的系统设计。
技术使用
此项目会使用到 SpringBoot、MyBatis、MySQL、Redis 等技术栈,但因本项目主要以小成本,轻量维护的实际使用为主,所以不会过多引入分布式技术栈。所以在设计实现上,主要以小而美、小而精,且能匹配到真实场景的使用为主。—— 分布式技术栈是为了更大规模的体量使用,但也会为此付出运维和应用服务器成本。所以一些中小厂的项目或者创业类型的项目,都会优先更轻量级技术栈使用,以此减少这部分成本。
除技术栈的使用外,涉及到开发工具包括;IntelliJ IDEA、WebStorm、Docker、Protainter、Nginx、Git、Maven、Navicat、SSH 工具等,以满足开发代码中的使用。
关于此项目可能还会涉及少部分 Next.js、Typescript 等前端知识,方便做 Web UI 的开发
项目计划
课程会包括,基础设置、模块开发、API 服务等几块内容,而基础设施主要为一些基本操作。这里会分为 3 个大的步骤;
- 在基础设置的基本必备服务搭建后,会进入接口鉴权的简单开发,这个模块开发后,大家就可以简单的使用了小傅哥提供的 OpenAI 了接口了。—— 当然你如果自己有 OpenAI 接口,也可以直接使用。像 https://huggingface.co/ 也提供了一些可以免费使用的简单 Open-API
- 有了这部分内容的使用,后续会进入 API-SDK 的开发,以及网页的简单开发。通过这样的开发构成一套基本的模块服务。ChatGPT-WEB-UI -> API-SDK -> 鉴权 -> OpenAI 的使用。
- ChatGPT-WEB-UI 流程跑通后,就可以逐步扩展其他服务模块。让业务与场景结合,如关注公众号、公众号回复、企业微信机器人、交易支付购买授权 Token。这个过程可以让 ChatGPT-WEB-UI 与各个模块结合使用
开始
课程会以视频、小册、代码、作业的方式进行推进,视频主要以演示操作、讲解核心的方式进行,并在小册和对应的代码中细化细节展示
推荐工具:
- Termius:云服务器链接工具,自带一套 SFTP 工具,很好用
- IDEA 插件:Sequence Diagram - 用于方法上右键查看代码流程的,主要帮助大家理解代码
- Docker - 可本地安装,不需要非得购买云服务器,也可以满足学习诉求。
- natapp - 内网穿透工具,相当于你开启后,可以分配给你一个域名,让外网访问到你的服务
Docker环境配置
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Mac、Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。总之它加快构建、共享和运行现代应用程序的速度
本地安装 Docker 环境,方便测试验证。开发阶段暂时也不需要云服务器。Docker 的安装非常简单,只需要选择适合你的机器版本。Mac、Windows、Linux,直接一步步安装即可。安装完成后,按照自己的机器配置一个适合的空间占用
云服务器安装 docker
centos 7.6 版本安装一个 Docker 容器
查看内核版本,x86_64 位系统,如果是 32 位是不能安装 docker 的
# 查看内核版本
uname -r
# 3.10.0-1160.119.1.el7.x86_64
# yum 更新到最新版本
sudo yum update
# 安装 Docker 所需的依赖包,整个过程需要 1-3 分钟左右
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 查看仓库所有Docker版本(选做)
yum list docker-ce --showduplicates | sort -r
# 安装 docker(默认最新的版本),安装指定版本:sudo yum install docker-ce-20.10.11.ce
sudo yum install docker
# 启动 Docker
sudo systemctl start docker
# 开机启动
systemctl enable docker
# 查看 Docker 版本
docker --version
# 卸载 Docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engineDocker 常用命令
docker --help # Docker 帮助
docker --version # 查看 Docker 版本
docker search <image> # 搜索镜像文件,如:docker search mysql
docker pull <image> # 拉取镜像文件, 如:docker pull mysql
docker images # 查看已经拉取下来的所以镜像文件
docker rmi <image> # 删除指定镜像文件
docker run --name <name> -p 80:8080 -d <image> # 发布指定镜像文件
docker ps # 查看正在运行的所有镜像
docker ps -a # 查看所有发布的镜像
docker rm <image> # 删除执行已发布的镜像配置镜像
由于某些原因,Docker Hub 官方仓库在国内已经无法拉取,如果是国内网络环境,可配置国内镜像使用,从而解决 Docker 镜像拉取失败或缓慢问题
# 创建目录
sudo mkdir -p /etc/docker
# 写入镜像配置
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"https://docker.linkedbus.com",
"https://docker.xuanyuan.me",
"https://ustc-edu-cn.mirror.aliyuncs.com/",
"https://ccr.ccs.tencentyun.com/"
]
}
EOF
# 重启docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker补充:配置阿里云镜像步骤 https://cr.console.aliyun.com/cn-shanghai/instances/mirrors
Portainer
docker pull portainer/portainer
docker run -d --restart=always --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer创建账号:
admin
admin123456admin查看运行的 docker 容器:http://124.222.10.5:9000/#!/2/docker/containers
Nginx 环境配置
docker stop Nginx
docker restart Nginx
docker rm Nginx
docker rmi Nginx
docker exec -it Nginx /bin/bashNginx 的使用包括的配置有;配置、首页、日志、SSL等,而这些内容在默认基础安装的情况下,都是在 Docker 容器中的,不容易被管理和使用。所以一般是在安装 Nginx 的时候是需要做映射处理。这个时候可以把在 Docker 上安装的 Nginx 配置信息拷贝到本地,之后做一些修改后,再去重新执行 Nginx 的安装【重新安装前记得把之前的 Nginx 删掉】
# 进入服务:
docker exec -it Nginx /bin/bash
# 查看配置:
ls /etc/nginx/
# 查看页面:
ls /usr/share/nginx/html其他说明:conf.d 是个文件夹,所有这个文件夹下的 Nginx 配置文件【default.conf】都会被 nginx.conf 加载。所以后面的 Nginx 配置,也主要是来修改这个文件
创建目录
# -p 表示一次创建多个目录结构
mkdir -p /data/nginx/conf
mkdir -p /data/nginx/logs
mkdir -p /data/nginx/certs配置 Nginx
docker pull nginx
cd /
mkdir mydata
cd mydata
mkdir nginx
cd nginx/
mkdir logs
mkdir html
mkdir conf
cd conf
touch nginx.conf将以下内容填到 nginx.conf 文件中
user nginx; #设置nginx服务的系统使用用户
worker_processes 1; #工作进程数
error_log /var/log/nginx/error.log warn; #nginx的错误日志
pid /var/run/nginx.pid; #nginx启动时候的pid
events {
worker_connections 1024; #每个进程允许的最大连接数
}
http { #http请求配置,一个http可以包含多个server
#定义 Content-Type
include /etc/nginx/mime.types;
default_type application/octet-stream;
#日志格式 此处main与access_log中的main对应
#$remote_addr:客户端地址
#$remote_user:http客户端请求nginx认证的用户名,默认不开启认证模块,不会记录
#$timelocal:nginx的时间
#$request:请求method + 路由 + http协议版本
#status:http reponse 状态码
#body_bytes_sent:response body的大小
#$http_referer:referer头信息参数,表示上级页面
#$http_user_agent:user-agent头信息参数,客户端信息
#$http_x_forwarded_for:x-forwarded-for头信息参数
log_format main '$http_user_agent' '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#访问日志,后面的main表示使用log_format中的main格式记录到access.log中
access_log /var/log/nginx/access.log main;
#nginx的一大优势,高效率文件传输
sendfile on;
#tcp_nopush on;
#客户端与服务端的超时时间,单位秒
keepalive_timeout 65;
#gzip on;
server { #http服务,一个server可以配置多个location
listen 80; #服务监听端口
server_name localhost; #主机名、域名
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html; #页面存放目录
index index.html index.htm; #默认页面
}
#error_page 404 /404.html;
# 将500 502 503 504的错误页面重定向到 /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html { #匹配error_page指定的页面路径
root /usr/share/nginx/html; #页面存放的目录
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
include /etc/nginx/conf.d/*.conf;
}运行容器并把 nginx 容器的配置文件挂载到主机
docker run -d -p 80:80 --name nginx --privileged=true -v /mydata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /mydata/nginx/html:/etc/nginx/html -v /mydata/nginx/logs:/var/log/nginx nginxmac 配置 nginx
docker pull nginx
mkdir -p ~/nginx/conf
mkdir -p ~/nginx/html
cd ~/nginx/conf
touch nginx.conf
vim nginx.conf填入基本内容
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}运行容器
docker run --name nginx-container \
-p 80:80 \
-v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v ~/nginx/html:/etc/nginx/html \
-d nginx查看
docker ps
# 重启
docker restart nginx-container
# 查看日志
docker logs nginx-container服务镜像构建和容器部署
通过在工程中配置 Dockerfile 和相关文件,进行镜像的打包和发布,以及 IDEA 中配置 Docker 连接进行镜像和服务的启动关闭管理。
- 本章源码:—— 申请访问权限(加入仓库):https://t.zsxq.com/04VB66uzz 部署:https://gitcode.net/KnowledgePlanet/chatgpt/dev-ops/-/tree/230504-xfg-docker 代码:https://gitcode.net/KnowledgePlanet/chatgpt/chatgpt-api/-/tree/230504-xfg-docker
- 课程视频:https://t.zsxq.com/0dCj8XonL
版本差异(课程环境 → 2026 实践)
| 特性 | 旧版(2023 课程) | 当前 |
|---|---|---|
| Docker | docker-ce 20.10 | Docker Engine 27.x/28.x(docker compose 取代 docker-compose) |
| 系统 | CentOS 7.6 | AlmaLinux 9 / Debian 12 / Ubuntu 22.04+(CentOS 7 已 EOL) |
| Nginx | nginx 1.2x | nginx 1.26.x/1.28.x(支持 HTTP/3) |
| 镜像加速 | daocloud/dockerproxy 等 | 各云厂商专属加速器或自建 registry(公共加速器多已失效) |
| Portainer | portainer/portainer | portainer/portainer-ce(2.x,CE 版) |
Docker/Nginx 安装与配置流程不变;注意 CentOS 7 已停止维护,镜像加速器需选用当前可用的云厂商地址。